﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace ShopCD.AccessData
{
    class AccessData
    {
        /// <summary>
        /// Tạo kết nối csdl
        /// </summary>
        private SqlConnection con = new SqlConnection();

        /// <summary>
        /// Phương thức get và set
        /// </summary>
        public SqlConnection GetCon
        {
            get { return con; }
            set { con = value; }
        }

        /// <summary>
        /// Thực hiện kết nối với Server
        /// </summary>
        public AccessData()
        {
            con.ConnectionString = @"Data Source=.;Initial Catalog=shopcd;Integrated Security=True";
        }

        /// <summary>
        /// Mở kết nối
        /// </summary>
        public void Open()
        {
            if (con.State == ConnectionState.Closed)
                con.Open();
        }

        /// <summary>
        /// Đóng kết nối
        /// </summary>
        public void Close()
        {
            if (con.State == ConnectionState.Open)
                con.Close();
        }

        /// <summary>
        /// Trả lại 1 DataTable
        /// </summary>
        /// <param name="sql">Chuỗi truy vấn SQL</param>
        /// <returns></returns>
        public DataTable Get_DataTable(string sql)
        {
            SqlDataAdapter adap = new SqlDataAdapter(sql, con);
            DataTable tb = new DataTable();
            adap.Fill(tb);
            return tb;
        }

        /// <summary>
        /// Trả lại 1 DataSet
        /// </summary>
        /// <param name="ds">DataSet truyền vào(Được trả lại sau khi thực hiện)</param>
        /// <param name="sql">Chuỗi truy vấn SQL</param>
        /// <returns></returns>
        public DataSet Get_DataSet(ref DataSet ds, string sql)
        {
            DataTable tb = Get_DataTable(sql);
            ds.Tables.Add(tb);
            return ds;
        }

        /// <summary>
        /// Thực thi câu lệnh SQL với chuỗi SQL
        /// </summary>
        /// <param name="sql">Chuỗi truy vấn SQL</param>
        public void Execute_SQL(string sql)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = sql;
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
        }

        /// <summary>
        /// Thực thi câu lệnh sql trong database an toàn với phương thức PS_Name
        /// </summary>
        /// <param name="PS_Name">Tên thủ tục</param>
        /// <param name="pr">Mảng các parameter</param>
        /// <returns></returns>
        public DataTable Execute_sp(string sp_Name, SqlParameter[] pr)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = sp_Name;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(pr);
            SqlDataAdapter adap = new SqlDataAdapter(cmd);
            DataTable tb = new DataTable();
            adap.Fill(tb);
            return tb;
        }

        /// <summary>
        /// Lưu lại các thay đổi nếu có của GridView
        /// </summary>
        /// <param name="tb">Table dữ liệu nạp</param>
        public void Save(ref DataTable tb)
        {
            string sql = "Select * From ShopCD";
            SqlDataAdapter adap = new SqlDataAdapter(sql, con);
            SqlCommandBuilder bd = new SqlCommandBuilder();
            bd.DataAdapter = adap;
            adap.Update(tb);
        }
    }
}
